package com.campus.activity.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.activity.entity.Activity;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 活动服务接口
 * 
 * @author System
 * @since 2024
 */
public interface ActivityService extends IService<Activity> {

    /**
     * 添加活动信息
     * 
     * @param activity 活动信息
     * @return 是否成功
     */
    boolean addActivity(Activity activity);

    /**
     * 更新活动信息
     * 
     * @param activityId 活动ID
     * @param activity 活动信息
     * @return 是否成功
     */
    boolean updateActivity(Integer activityId, Activity activity);

    /**
     * 删除活动
     * 
     * @param activityId 活动ID
     * @return 是否成功
     */
    boolean deleteActivity(Integer activityId);

    /**
     * 根据活动类型查询活动列表
     * 
     * @param activityType 活动类型
     * @return 活动列表
     */
    List<Activity> getActivitiesByType(String activityType);

    /**
     * 根据时间范围查询活动列表
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 活动列表
     */
    List<Activity> getActivitiesByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据地点查询活动列表
     * 
     * @param location 活动地点
     * @return 活动列表
     */
    List<Activity> getActivitiesByLocation(String location);

    /**
     * 查询即将截止报名的活动
     * 
     * @return 活动列表
     */
    List<Activity> getUpcomingDeadlineActivities();

    /**
     * 根据组织者ID查询活动列表
     * 
     * @param organizerId 组织者ID
     * @return 活动列表
     */
    List<Activity> getActivitiesByOrganizerId(Integer organizerId);

    /**
     * 发布活动
     * 
     * @param activity 活动信息
     * @return 是否成功
     */
    boolean publishActivity(Activity activity);

    /**
     * 查询所有开放的活动
     * 
     * @return 活动列表
     */
    List<Activity> getAllOpenActivities();

    /**
     * 根据条件查询活动
     * 
     * @param activityType 活动类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param location 地点
     * @return 活动列表
     */
    List<Activity> queryActivities(String activityType, LocalDateTime startTime, LocalDateTime endTime, String location);

    /**
     * 获取热门活动
     * 
     * @return 热门活动列表
     */
    List<Activity> getPopularActivities();

    /**
     * 获取最新活动
     * 
     * @param limit 限制数量
     * @return 最新活动列表
     */
    List<Activity> getLatestActivities(Integer limit);
}